package com.rpg.controle;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import com.rpg.entidades.Equipe;
import com.rpg.entidades.Personagem;
import com.rpg.enuns.NomeClasse;

public class EquipeControlador {
	PersonagemControlador personagemController = new PersonagemControlador();
		
	private Equipe usuario;
	private Equipe sistema;
	private Boolean usuarioJogando;
	
	public List<Personagem> get(){
		return sistema.getTeam();
	}
	public Boolean getUsuarioJogando() {
		return usuarioJogando;
	}

	public void setUsuarioJogando() {
		if(usuarioJogando){
			this.usuarioJogando = false;
		} else {
			this.usuarioJogando = true;
		}
		
	}

	private Equipe instanciarEquipe(List<Personagem> personagems) {
		Equipe equipe = new Equipe(personagems);
		
		return equipe;
				
	}
	
	
	public Personagem getPersonagem(Equipe equipe, int index){
		return equipe.getTeam().get(index);
	}
	

	public void criarEquipes(List<NomeClasse> nomes){
			
		List<Personagem> time = new ArrayList<Personagem>();
		int qntAntagonista = 0;
		
		for (NomeClasse nome: nomes){
			time.add(personagemController.criarPersonagem(nome));
			
			if(nome.compararNome("Antagonista")){
				qntAntagonista++;
			}
		}
		usuarioJogando = true;
		usuario = instanciarEquipe(time);
		
		criarEquipeSistema(qntAntagonista, nomes.size() - qntAntagonista);
		
	}
	
	private void criarEquipeSistema(int qntAntagonista, int qntProtagonista){
		Random gerador = new Random();
		int i;
		int index;
		List<Personagem> time = new ArrayList<Personagem>();
		List<NomeClasse> personagens = NomeClasse.listaAntagonista();
		
		// selecionar uma equipe aleatoria pa lutar contra o usuario
		for(i=0; i < qntAntagonista; i++){
			index = gerador.nextInt(5); // 5 � a quantidade de antagonitas possiveis de serem escolhidos, 
										// A fun��o gera valores de 0 a 4 os indices q a lista tem
			time.add(personagemController.criarPersonagem(personagens.get(index)));
		}
		
		personagens = NomeClasse.listaProtagonista();
		for(i=0; i < qntProtagonista; i++){
			index = gerador.nextInt(3); // 3 � a qntd de antagonitas possiveis de serem escolhidos, 
										// A fun��o gera valores de 0 a 2 os indices que a lista tem
			time.add(personagemController.criarPersonagem(personagens.get(index)));
		}
		
		// Alocar a equipe do sistema
		
		sistema = instanciarEquipe(time);
	}
	
	
	public void excluirPersonagens(Personagem personagem){
		if(!usuario.removePersonagem(personagem)){
			sistema.removePersonagem(personagem);
		}
	}
	
	
	public void atualizarManaEquipe() {
		Equipe equipe;
		
		// descobre qual equipe esta jogando
		if(usuarioJogando){
			equipe = usuario;
		} else {
			equipe = sistema;
		}
		
		//incrementa a mana por ser o começo do turno
		for(Personagem personagem: equipe.getTeam()){
			personagemController.incrementarMana(personagem);
		}	
	}
	
	public int getTamanhoEquipe(){
		if(usuarioJogando){
			return usuario.getTeam().size();
		} else {
			return sistema.getTeam().size();
		}
	}
}
